import { defineStore } from "pinia";
import { reactive, ref, computed, watchEffect, watch, onMounted } from "vue";
import { 获取最大值, 清空对象 } from "../components/hooks.js";
import { useQuasar } from "quasar";
import { date } from "quasar";
import { useRouter } from "vue-router";

export const useStore = defineStore("amtf", () => {
  const $q = useQuasar();
  const router = useRouter();

  // const count = ref(0);
  // function increment() {
  //   count.value++;
  // }
  // const count计算 = computed(() =>(地区名)=> {
  //   console.log('地区名',地区名)
  //   return count.value*2
  // })
  const count = reactive({
    澳门: 0,
    香港: 0,
  });
  function increment(地区名) {
    console.log("地区名", 地区名);
    count[地区名]++;
  }
  const count计算 = computed(() => (地区名) => {
    console.log("地区名", 地区名);
    return count[地区名] * 2;
  });

  // const 总下单 = reactive({
  //   澳门: [],
  //   香港: [],
  // });
  const 下单模板 = {
    编号: "1",
    下单人: "amtf",
    地区: "澳门",
    开奖日期: "amtf",
    收总计: "amtf",
    特码收总计: "amtf",
    平特肖收总计: "amtf",
    出总计: "amtf",
    下单明细: [],
  };

  const 总下单 = reactive([下单模板]);
  const 开奖结果模板 = {
    地区: "澳门",
    开奖日期: "amtf",
    平1: "amtf",
    平2: "amtf",
    平3: "amtf",
    平4: "amtf",
    平5: "amtf",
    平6: "amtf",
    特: "amtf",
  };
  const 开奖结果 = reactive([
    {
      地区: "澳门",
      开奖日期: "amtf",
      平1: "amtf",
      平2: "amtf",
      平3: "amtf",
      平4: "amtf",
      平5: "amtf",
      平6: "amtf",
      特: "amtf",
    },
  ]);

  const 当前开奖结果 = reactive(开奖结果模板);

  const 肖号对照 = {
    兔: ["01", "13", "25", "37", "49"],
    虎: ["02", "14", "26", "38"],
    牛: ["03", "15", "27", "39"],
    鼠: ["04", "16", "28", "40"],
    猪: ["05", "17", "29", "41"],
    狗: ["06", "18", "30", "42"],
    鸡: ["07", "19", "31", "43"],
    猴: ["08", "20", "32", "44"],
    羊: ["09", "21", "33", "45"],
    马: ["10", "22", "34", "46"],
    蛇: ["11", "23", "35", "47"],
    龙: ["12", "24", "36", "48"],
  };

  function 筛选开奖结果(地区) {
    let kk = 开奖结果.filter((item) => item.地区 == 地区);
    return kk;
  }

  function 找对应主单(编号) {
    // console.log("编号", 编号);
    const record = 总下单.find((item) => item.编号 === 编号);
    return record;
  }

  function 删除主单明细(编号,明细序号) {
    const 主单 = 找对应主单(编号)
    主单.下单明细 = 主单.下单明细.filter((item) => item.序号 != 明细序号);
    保存数据()
  }

  function 找对应主单明细(编号) {
    // console.log("编号", 编号);
    const record = 总下单.find((item) => item.编号 === 编号);
    return record.下单明细;
  }

  // function 找对应主单(编号) {
  //   // console.log("编号", 编号);
  //   const record = 总下单.find((item) => item.编号 === 编号);
  //   return record;
  // }

  function 今天日期() {
    const timeStamp = Date.now();
    return date.formatDate(timeStamp, "YYYY年MM月DD日");
  }

  function 新增下单() {
    let 最大编号 = 获取最大值(总下单, "编号");
    最大编号++;
    const newRow = 下单模板;
    const 编号 = 最大编号.toString();
    newRow.编号 = 编号;
    newRow.开奖日期 = 今天日期();
    newRow.下单人 = "某某某";
    总下单.push(newRow);
    保存数据();
    router.push(`xianqing/${编号}`);
  }

  function delete下单(编号) {
    const i = 总下单.findIndex((item) => item.编号 == 编号);
    // console.log("i", i);
    总下单.splice(i, 1);
    保存数据();
  }

  function add明细(编号, 地区名, 下注数, 玩法) {
    // console.log("编号", 编号);
    // console.log("地区名", 地区名);
    const 主单 = 找对应主单(编号);
    const 主单明细 = 主单.下单明细;
    // console.log("主单明细", 主单明细);

    let 最大序号 = 获取最大值(主单明细);
    const 赔率 = 玩法 == "特码" ? 46 : 1;
    最大序号++;

    const 原来总计 = 计算rows总下单(主单明细);

    Object.keys(下注数).forEach((key) => {
      // console.log(key, obj[key]);
      const a = {
        序号: 最大序号,
        玩法: 玩法,
        号码: key,
        收: 下注数[key],
        赔率: 赔率,
        // 出: 出(地区名,key,下注数[key],赔率),
      };
      主单明细.push(a);
      最大序号++;
    });
    const 新总计 = 计算rows总下单(主单明细);
    const 变动 = 新总计 - 原来总计;
    $q.notify({
      message: `${地区名} + ${变动}`,
      color: "negative",
      timeout: 1,
      position: "center",
    });
    保存数据();
  }

  // 监控总下单的每条数据，有待优化
  watchEffect(() => {
    console.log('监控总下单的每条数据执行了……')
    总下单.forEach((e) => {
      // let kk=计算rows总下单(e.下单明细);
      e.收总计 = 计算rows总下单(e.下单明细);
      e.特码收总计 = 计算特码收总计(e.下单明细);
      e.平特肖收总计 = 计算平特肖收总计(e.下单明细);
      e.开奖结果 = 找对应开奖结果by地区和开奖日期(e.地区,e.开奖日期);
      let array = e.下单明细;
      array.forEach((单行明细) => {
        // console.log("单行明细", 单行明细);
        let 赔率=0
        if (单行明细.玩法 == "特码") {
          if (单行明细.号码==e.开奖结果.特) {
            赔率=单行明细.赔率
          }
        }else{ //平特肖
          for (const element of Object.values(e.开奖结果)) {
            if (element==单行明细.号码) {
              赔率=单行明细.赔率
              break
            }
          }
        }
        单行明细.出 = 单行明细.收 * 赔率;
      });
      e.出总计 = 计算出总计(e.下单明细);
    });
    // 保存数据()
  });

  function 找对应开奖结果(主单) {
    // console.log("找对应开奖结果ing 主单", 主单);
    let array = 筛选开奖结果(主单.地区);
    let 匹配的开奖结果 = {
      平1: "没开",
      平2: "没开",
      平3: "没开",
      平4: "没开",
      平5: "没开",
      平6: "没开",
      特: "没开",
    };
    array.forEach((element) => {
      // console.log("element", element.开奖日期);
      // console.log("主单.开奖日期", 主单.开奖日期);
      // console.log(
      //   "element.开奖日期 == 主单.开奖日期",
      //   element.开奖日期 == 主单.开奖日期
      // );
      if (element.开奖日期 == 主单.开奖日期) {
        // return element;
        匹配的开奖结果 = element;
        return;
      }
    });

    return 匹配的开奖结果;
    if (Object.keys(匹配的开奖结果).length === 0) {
      return "还没开奖";
    } else {
      // Object.keys(匹配的开奖结果).forEach(k => {
      //   v=匹配的开奖结果.k
      //   if (v.) {
      //   }
      // });
      return 匹配的开奖结果;
    }
  }

  function 计算rows总下单(主单明细) {
    return 主单明细.reduce((total, cur) => {
      return total + cur.收;
    }, 0);
  }

  function 计算特码收总计(主单明细) {
    return 主单明细.reduce((total, cur) => {
      return cur.玩法 == "特码" ? total + cur.收 : total;
    }, 0);
  }
  const 平特肖收总计 = computed(() => (编号) => {
    console.log("computed 平特肖收总计 ing");
    const 主单明细 = 找对应主单明细(编号);
    return 主单明细.reduce((total, cur) => {
      return cur.玩法 == "平特肖" ? total + cur.收 : total;
    }, 0);
  });

  function 计算平特肖收总计(主单明细) {
    return 主单明细.reduce((total, cur) => {
      return cur.玩法 == "平特肖" ? total + cur.收 : total;
    }, 0);
  }
  function 计算出总计(主单明细) {
    return 主单明细.reduce((total, cur) => {
      return isNumber(cur.出) ? total + cur.出 : total;
    }, 0);
  }
  function 保存数据() {
    console.log("保存数据 总下单", 总下单);
    try {
      $q.localStorage.set("总下单", 总下单);
    } catch (e) {
      $q.notify({
        message: `保存缓存失败 ${e}`,
        color: "negative",
        timeout: 1,
        position: "center",
      });
    }
  }
  function 读取数据() {
    const 缓存值 = $q.localStorage.getItem("总下单");
    // console.log("缓存值", 缓存值);
    // console.log("缓存值", typeof 缓存值);
    // console.log('value === "null"', 缓存值 === "null");
    // console.log("value === null", 缓存值 === null);
    // typeof 缓存值 === 'object' && 缓存值 === null;

    if (typeof 缓存值 === "object" && 缓存值 !== null) {
      // 总下单 = 缓存值;
      // 清空obj1
      Object.keys(总下单).forEach((key) => delete 总下单[key]);

      // 把obj2的键赋予给obj1
      Object.keys(缓存值).forEach((key) => {
        总下单[key] = 缓存值[key];
      });
      // 总下单.澳门 = 缓存值.澳门;
      // 总下单.香港 = 缓存值.香港;
      // console.log("总下单", 总下单);
    }
  }

  const 待选号码 = Array(49).fill().map((_, index) => (index + 1).toLocaleString('zh', { minimumIntegerDigits: 2 }));

  function update当前开奖结果(val, i, 地区) {
    当前开奖结果[`平${i}`] = val;
    console.log("update当前开奖结果ing");
  }
  function 保存开奖结果() {
    try {
      $q.localStorage.set("开奖结果", 开奖结果);
    } catch (e) {
      $q.notify({
        message: `保存缓存失败 ${e}`,
        color: "negative",
        timeout: 1,
        position: "center",
      });
    }
  }
  function 读取开奖结果缓存() {
    // console.log("读取开奖结果缓存ing");
    if ($q.localStorage.has("开奖结果")) {
      const 缓存值 = $q.localStorage.getItem("开奖结果");
      // Object.keys(缓存值).forEach((key) => {
      //   开奖结果[key] = 缓存值[key];
      // });
      开奖结果.splice(0, 开奖结果.length, ...缓存值); // 清空arr1并将arr2的全部值传入arr1
    }
  }

  function isNumber(value) {
    return typeof value === "number" && !isNaN(value);
  }

  const 下单网站 = {
    惠泽社群总网: "https://37248.com",
    www临时直连网: ["https://www.28970.com/"],
  };

  // 监控当前开奖结果 找对应肖
  watchEffect(() => {
    console.log("监控当前开奖结果执行了…………");
    Object.keys(当前开奖结果).forEach((平特k) => {
      let 肖 = "";
      if (/(?=.*[平特])(?!.*肖)/.test(平特k)) {
        let 号码 = 当前开奖结果[平特k];
        肖 = 找单个号码对应肖(号码);
        当前开奖结果[`${平特k}_肖`] = 肖;
      }
    });
  });

  function 找单个号码对应肖(号码) {
    let 肖 = "";
    for (const [key, value] of Object.entries(肖号对照)) {
      if (value.includes(号码)) {
        肖 = key;
        return 肖;
      }
    }
    return 肖;
  }

  function 找对应开奖结果byId(id) {
    const record = 开奖结果.find((item) => item.id === id);
    return record;
  }

  function 找对应开奖结果by地区和开奖日期(地区,开奖日期) {
    console.log("找对应开奖结果by地区和开奖日期………………");
    let record = 开奖结果.find((item) => (item.地区 === 地区 && item.开奖日期 === 开奖日期));
    if (record!== undefined) {
      return record;
    }
    return {};
  }
  function 生成id() {
    const timeStamp = Date.now();
    return date.formatDate(timeStamp, "YYYY-MM-DDTHH:mm:ss.ss");
  }
  function update开奖结果(地区, 新值) {
    const index = 开奖结果.findIndex((item) => {
      console.log("item………………………………", item);
      return item.地区 === 新值.地区 && item.开奖日期 === 新值.开奖日期;
    });
    if (index != -1) {
      console.log("找到相同开奖日期");
      开奖结果[index] = 新值;
    } else {
      console.log("没找到相同开奖日期");
      新值.id=生成id()
      开奖结果.push(新值);
    }
    保存开奖结果();
  }

  function delete开奖结果(地区, row) {
    // 开奖结果 = 开奖结果.filter(
    //   (item) => (item.地区 == row.地区 && item.开奖日期 != row.开奖日期)
    // );
    for (let i = 开奖结果.length - 1; i >= 0; i--) {
      if (
        开奖结果[i].地区 === row.地区 &&
        开奖结果[i].开奖日期 === row.开奖日期
      ) {
        开奖结果.splice(i, 1);
      }
    }
    保存开奖结果();
  }

  onMounted(() => {
    读取开奖结果缓存();
  });

  return {
    待选号码,
    删除主单明细,
    找对应开奖结果byId,
    筛选开奖结果,
    update当前开奖结果,
    当前开奖结果,
    找对应开奖结果,
    delete下单,
    保存开奖结果,
    读取开奖结果缓存,
    delete开奖结果,
    update开奖结果,
    今天日期,
    count,
    increment,
    count计算,
    总下单,
    计算rows总下单,
    add明细,
    平特肖收总计,
    保存数据,
    读取数据,
    新增下单,
    找对应主单,
    开奖结果,
  };
});
